/**
 * @Author: zxc
 * @Date: 2020-11-06 13:21:39
 * @func:字符串整数转换
 */

/**
 * @param {string} s
 * @return {number}
 */
// var myAtoi = function (s) {
//   const num = parseInt(s, 10);
//   if (isNaN(num)) return 0;
//   else if ((num | 0) !== num) {
//     return num > 0 ? Math.pow(2, 31) - 1 : Math.pow(-2, 31);
//   }
//   return num
// };

// var myAtoi = function (str) {
//   let flag = true; //判断正负标志位
//   let restNum = /[0-9]/; //是否为数值正则验证
//   let i = 0; //当前字符串索引
//   let num = 0; //要返回的数值
//   let int_min = 2147483648; //范围判断值
//   while (str[i] === " ") i++; //使标志位到第一位非空字符
//   if (str[i] === "-") {
//     //确定是否有正负标志位，
//     flag = false;
//     i++; //索引前移，防止有-+这样多个标志位
//   } else if (str[i] === "+") {
//     //确定是否有正负标志位
//     i++;
//   }
//   while (restNum.test(str[i]) && i < str.length) {
//     //判断i是否超出索引，以及只有数值可以进入数值叠加
//     num = num10 + parseInt(str[i]);
//     i++;
//     if (num >= 2147483648) {
//       num = flag ? 2147483647 : 2147483648;
//       break;
//     }
//   }
//   return flag ? num : -num;
// };

var myAtoi = function (s) {
  s = s.trim()
  let regNum = /[0-9]/,
    identity = 1,
    num = 0,
    i = 0
  if (s[i] === "-") {
    identity = -1
    i++
  } else if (s[i] === "+") {
    identity = 1
    i++
  }
  while (s[i] && regNum.test(s[i])) {
    num = num * 10 + Number(s[i])
    i++
  }
  if ((num | 0) !== num && num !== 0) {
    return identity > 0 ? Math.pow(2, 31) - 1 : Math.pow(-2, 31)
  }
  return num * identity
}
